'''
    reference.py: This file contains reference information that other files may need to use to fill in default values and the like.  
        As such, tread carefully.
'''
weaponRef = {
    "lmg" : {  "acc" : "0", "er" : "32", "dam" : "4", "traits" : "AI,BU2", "type" : "ranged", "sortOrder" : "6"  }, 
    "mmg" : {  "acc" : "0", "er" : "32", "dam" : "5", "traits" : "AI,BU2", "type" : "ranged", "sortOrder" : "6"  }, 
    "hmg" : {  "acc" : "0", "er" : "32", "dam" : "6", "traits" : "AI,BU2", "type" : "ranged", "sortOrder" : "6"  }, 
    "vlrf" : {  "acc" : "0", "er" : "64", "dam" : "8", "traits" : "SNP", "type" : "ranged", "sortOrder" : "1"  }, 
    "lrf" : {  "acc" : "0", "er" : "64", "dam" : "10", "traits" : "SNP", "type" : "ranged", "sortOrder" : "1"  }, 
    "mrf" : {  "acc" : "0", "er" : "64", "dam" : "12", "traits" : "SNP", "type" : "ranged", "sortOrder" : "1"  }, 
    "hrf" : {  "acc" : "0", "er" : "64", "dam" : "14", "traits" : "SNP", "type" : "ranged", "sortOrder" : "1"  }, 
    "vhrf" : {  "acc" : "0", "er" : "64", "dam" : "16", "traits" : "SNP", "type" : "ranged", "sortOrder" : "1"  }, 
    "dpg" : {  "acc" : "0", "er" : "32", "dam" : "6", "traits" : "BU1", "type" : "ranged", "ammo" : "2", "sortOrder" : "6"  }, 
    "fgc" : {  "acc" : "1", "er" : "32", "dam" : "8", "traits" : "AI,BU2", "type" : "ranged", "sortOrder" : "1"  }, 
    "laac" : {  "acc" : "0", "er" : "48", "dam" : "8", "traits" : "AA,BU2", "type" : "ranged", "sortOrder" : "1"  }, 
    "maac" : {  "acc" : "0", "er" : "48", "dam" : "10", "traits" : "AA,BU2", "type" : "ranged", "sortOrder" : "1"  }, 
    "haac" : {  "acc" : "0", "er" : "48", "dam" : "12", "traits" : "AA,BU2", "type" : "ranged", "sortOrder" : "1"  }, 
    "vlac" : {  "acc" : "0", "er" : "48", "dam" : "6", "traits" : "BU1", "type" : "ranged", "sortOrder" : "1"  }, 
    "lac" : {  "acc" : "0", "er" : "48", "dam" : "8", "traits" : "BU1", "type" : "ranged", "sortOrder" : "1"  }, 
    "mac" : {  "acc" : "0", "er" : "48", "dam" : "10", "traits" : "BU1", "type" : "ranged", "sortOrder" : "1"  }, 
    "hac" : {  "acc" : "0", "er" : "48", "dam" : "12", "traits" : "BU1", "type" : "ranged", "sortOrder" : "1"  }, 
    "vhac" : {  "acc" : "0", "er" : "48", "dam" : "14", "traits" : "BU1", "type" : "ranged", "sortOrder" : "1"  }, 
    "vlfg" : {  "acc" : "0", "er" : "80", "dam" : "18", "traits" : "AE1,IF", "type" : "ranged", "sortOrder" : "0"  }, 
    "lfg" : {  "acc" : "0", "er" : "80", "dam" : "22", "traits" : "AE1,IF", "type" : "ranged", "sortOrder" : "0"  }, 
    "mfg" : {  "acc" : "0", "er" : "80", "dam" : "26", "traits" : "AE1,IF", "type" : "ranged", "sortOrder" : "0"  }, 
    "hfg" : {  "acc" : "0", "er" : "80", "dam" : "28", "traits" : "AE1,IF", "type" : "ranged", "sortOrder" : "0"  }, 
    "vhfg" : {  "acc" : "0", "er" : "80", "dam" : "32", "traits" : "AE1,IF", "type" : "ranged", "sortOrder" : "0"  }, 
    "sc" : {  "acc" : "-1", "er" : "24", "dam" : "30", "type" : "ranged", "sortOrder" : "0"  }, 
    "lpzf" : {  "acc" : "-1", "er" : "16", "dam" : "10", "traits" : "HEAT", "type" : "ranged", "ammo" : "2", "sortOrder" : "5"  }, 
    "mpzf" : {  "acc" : "-1", "er" : "16", "dam" : "15", "traits" : "HEAT", "type" : "ranged", "ammo" : "2", "sortOrder" : "5"  }, 
    "hpzf" : {  "acc" : "-1", "er" : "16", "dam" : "20", "traits" : "HEAT", "type" : "ranged", "ammo" : "2", "sortOrder" : "5"  }, 
    "rbzk" : {  "acc" : "0", "er" : "40", "dam" : "15", "traits" : "BU1,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "lbzk" : {  "acc" : "0", "er" : "40", "dam" : "15", "traits" : "HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "mbzk" : {  "acc" : "0", "er" : "40", "dam" : "20", "traits" : "HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "hbzk" : {  "acc" : "0", "er" : "40", "dam" : "25", "traits" : "HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "vlrp/8" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE1,BA1,HEAT", "type" : "ranged", "ammo" : "2", "sortOrder" : "3"  }, 
    "vlrp/32" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE1,BA1,HEAT", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "vlrp/64" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE2,BA2,HEAT", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "vlrp/128" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE2,BA2,HEAT", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "lrp/8" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE1,BA1,HEAT,MISL", "type" : "ranged", "ammo" : "2", "sortOrder" : "3"  }, 
    "lrp/16" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE1,BA1,HEAT,MISL", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "lrp/24" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE2,BA2,HEAT,MISL", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "lrp/32" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE2,BA2,HEAT,MISL", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "mrp/9" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE1,BA1,HEAT,MISL", "type" : "ranged", "ammo" : "2", "sortOrder" : "3"  }, 
    "mrp/18" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE1,BA1,HEAT,MISL", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "mrp/27" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE2,BA2,HEAT,MISL", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "mrp/36" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE2,BA2,HEAT,MISL", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "hrp/24" : {  "acc" : "-1", "er" : "64", "dam" : "20", "traits" : "AE2,BA1,HEAT,MISL", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "hrp/48" : {  "acc" : "-1", "er" : "64", "dam" : "20", "traits" : "AE3,BA2,HEAT,MISL", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "vhrp/24" : {  "acc" : "-1", "er" : "64", "dam" : "24", "traits" : "AE2,BA1,HEAT", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "vhrp/48" : {  "acc" : "-1", "er" : "64", "dam" : "24", "traits" : "AE3,BA2,HEAT", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "vlirp/8" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE1,BA1,HEAT,SB", "type" : "ranged", "ammo" : "2", "sortOrder" : "3"  }, 
    "vlirp/32" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE1,BA1,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "vlirp/64" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE2,BA2,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "vlirp/128" : {  "acc" : "-1", "er" : "48", "dam" : "8", "traits" : "AE2,BA2,HEAT,SB", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "lirp/8" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE1,BA1,HEAT,SB", "type" : "ranged", "ammo" : "2", "sortOrder" : "3"  }, 
    "lirp/16" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE1,BA1,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "lirp/24" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE2,BA2,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "lirp/32" : {  "acc" : "-1", "er" : "48", "dam" : "12", "traits" : "AE2,BA2,HEAT,SB", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "mirp/9" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE1,BA1,HEAT,SB", "type" : "ranged", "ammo" : "2", "sortOrder" : "3"  }, 
    "mirp/18" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE1,BA1,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "mirp/27" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE2,BA2,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "mirp/36" : {  "acc" : "-1", "er" : "48", "dam" : "16", "traits" : "AE2,BA2,HEAT,SB", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "hirp/24" : {  "acc" : "-1", "er" : "64", "dam" : "20", "traits" : "AE2,BA1,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "hirp/48" : {  "acc" : "-1", "er" : "64", "dam" : "20", "traits" : "AE3,BA2,HEAT,SB", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "vhirp/24" : {  "acc" : "-1", "er" : "64", "dam" : "24", "traits" : "AE2,BA1,HEAT,SB", "type" : "ranged", "ammo" : "3", "sortOrder" : "3"  }, 
    "vhirp/48" : {  "acc" : "-1", "er" : "64", "dam" : "24", "traits" : "AE3,BA2,HEAT,SB", "type" : "ranged", "ammo" : "4", "sortOrder" : "3"  }, 
    "aam" : {  "acc" : "1", "er" : "64", "dam" : "10", "traits" : "AA,HEAT,G,IF", "type" : "ranged", "sortOrder" : "2"  }, 
    "abm" : {  "acc" : "1", "er" : "64", "dam" : "15", "traits" : "AE4,HEAT,G,IF", "type" : "ranged", "sortOrder" : "2"  }, 
    "agm" : {  "acc" : "1", "er" : "64", "dam" : "15", "traits" : "G,HEAT,IF", "type" : "ranged", "sortOrder" : "2"  }, 
    "atm" : {  "acc" : "1", "er" : "64", "dam" : "25", "traits" : "G,HEAT,IF", "type" : "ranged", "sortOrder" : "2"  }, 
    "alm" : {  "acc" : "1", "er" : "64", "dam" : "35", "traits" : "G,HEAT,IF", "type" : "ranged", "sortOrder" : "2"  }, 
    "lfl" : {  "acc" : "1", "er" : "24", "dam" : "6", "traits" : "AE2,BU1,SB,SPY", "type" : "ranged", "sortOrder" : "2"  }, 
    "mfl" : {  "acc" : "1", "er" : "24", "dam" : "8", "traits" : "AE2,BU1,SB,SPY", "type" : "ranged", "sortOrder" : "2"  }, 
    "hfl" : {  "acc" : "1", "er" : "24", "dam" : "10", "traits" : "AE2,BU1,SB,SPY", "type" : "ranged", "sortOrder" : "2"  }, 
    "lgm" : {  "acc" : "-1", "er" : "72", "dam" : "12", "traits" : "AE2,G,IF,MR", "type" : "ranged", "sortOrder" : "4"  }, 
    "mgm" : {  "acc" : "-1", "er" : "72", "dam" : "16", "traits" : "AE2,G,IF,MR", "type" : "ranged", "sortOrder" : "4"  }, 
    "hgm" : {  "acc" : "-1", "er" : "72", "dam" : "22", "traits" : "AE2,G,IF,MR", "type" : "ranged", "sortOrder" : "4"  }, 
    "lfm" : {  "acc" : "-1", "er" : "72", "dam" : "15", "traits" : "AE4,IF,MR", "type" : "ranged", "sortOrder" : "4"  }, 
    "mfm" : {  "acc" : "-1", "er" : "72", "dam" : "20", "traits" : "AE4,IF,MR", "type" : "ranged", "sortOrder" : "4"  }, 
    "hfm" : {  "acc" : "-1", "er" : "72", "dam" : "25", "traits" : "AE4,IF,MR", "type" : "ranged", "sortOrder" : "4"  }, 
    "lgl" : {  "acc" : "-1", "er" : "32", "dam" : "12", "traits" : "AE1,BU1,IF", "type" : "ranged", "sortOrder" : "1"  }, 
    "mgl" : {  "acc" : "-1", "er" : "32", "dam" : "16", "traits" : "AE1,BU1,IF", "type" : "ranged", "sortOrder" : "1"  }, 
    "hgl" : {  "acc" : "-1", "er" : "32", "dam" : "20", "traits" : "AE1,BU1,IF", "type" : "ranged", "sortOrder" : "1"  }, 
    "apm" : {  "acc" : "-1", "er" : "32", "dam" : "4", "traits" : "AI,AE4,IF,MR", "type" : "ranged", "sortOrder" : "7"  }, 
    "apgl" : {  "acc" : "-1", "er" : "32", "dam" : "4", "traits" : "AI,AE2,BU1,IF", "type" : "ranged", "ammo" : "1", "sortOrder" : "7"  }, 
    "lpa" : {  "acc" : "1", "er" : "48", "dam" : "14", "traits" : "H,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "mpa" : {  "acc" : "1", "er" : "48", "dam" : "18", "traits" : "H,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "hpa" : {  "acc" : "1", "er" : "48", "dam" : "22", "traits" : "H,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "lrg" : {  "acc" : "0", "er" : "96", "dam" : "15", "type" : "ranged", "sortOrder" : "0"  }, 
    "mrg" : {  "acc" : "0", "er" : "96", "dam" : "25", "type" : "ranged", "sortOrder" : "0"  }, 
    "hrg" : {  "acc" : "0", "er" : "96", "dam" : "35", "type" : "ranged", "sortOrder" : "0"  }, 
    "slc" : {  "acc" : "1", "er" : "64", "dam" : "12", "traits" : "HEAT,SNP", "type" : "ranged", "sortOrder" : "0"  }, 
    "llc" : {  "acc" : "1", "er" : "64", "dam" : "16", "traits" : "HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "mlc" : {  "acc" : "1", "er" : "64", "dam" : "20", "traits" : "HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "hlc" : {  "acc" : "1", "er" : "64", "dam" : "24", "traits" : "HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "lglc" : {  "acc" : "1", "er" : "48", "dam" : "16", "traits" : "BU1,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "mglc" : {  "acc" : "1", "er" : "48", "dam" : "20", "traits" : "BU1,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "hglc" : {  "acc" : "1", "er" : "48", "dam" : "24", "traits" : "BU1,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "lplc" : {  "acc" : "1", "er" : "64", "dam" : "12", "traits" : "BU1,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "mplc" : {  "acc" : "1", "er" : "64", "dam" : "18", "traits" : "BU1,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "hplc" : {  "acc" : "1", "er" : "64", "dam" : "20", "traits" : "BU1,HEAT", "type" : "ranged", "sortOrder" : "0"  }, 
    "igr" : {  "acc" : "-1", "er" : "32", "dam" : "8", "traits" : "AE1,AI,IF,STA", "type" : "infantry", "sortOrder" : "0"  }, 
    "ilmg" : {  "acc" : "0", "er" : "32", "dam" : "3", "traits" : "AI,BU2,STA", "type" : "infantry", "sortOrder" : "0"  }, 
    "ilm" : {  "acc" : "0", "er" : "64", "dam" : "8", "traits" : "AE2,AI,IF,MR,STA", "type" : "infantry", "sortOrder" : "0"  }, 
    "irl" : {  "acc" : "0", "er" : "32", "dam" : "15", "traits" : "STA", "type" : "infantry", "sortOrder" : "0"  }, 
    "iagm" : {  "acc" : "1", "er" : "32", "dam" : "15", "traits" : "G,STA", "type" : "infantry", "sortOrder" : "0"  }, 
    "iagr" : {  "acc" : "0", "er" : "64", "dam" : "8", "traits" : "STA", "type" : "infantry", "sortOrder" : "0"  }, 
    "islr" : {  "acc" : "1", "er" : "64", "dam" : "4", "traits" : "AI,STA,SNP", "type" : "infantry", "sortOrder" : "0"  }, 
    "isr" : {  "acc" : "1", "er" : "64", "dam" : "4", "traits" : "AI,STA", "type" : "infantry", "sortOrder" : "0"  }, 
    "iar" : {  "acc" : "0", "er" : "32", "dam" : "4", "traits" : "AI,BU1", "type" : "infantry", "sortOrder" : "0"  }, 
    "icg" : {  "acc" : "0", "er" : "32", "dam" : "5", "traits" : "AI,BU2", "type" : "infantry", "sortOrder" : "0"  }, 
    "ihrf" : {  "acc" : "0", "er" : "48", "dam" : "5", "traits" : "AI", "type" : "infantry", "sortOrder" : "0"  }, 
    "ilrf" : {  "acc" : "0", "er" : "48", "dam" : "4", "traits" : "AI", "type" : "infantry", "sortOrder" : "0"  }, 
    "hg" : {  "acc" : "-1", "er" : "0", "dam" : "10", "traits" : "AE1,IF", "type" : "thrown", "ammo" : "1", "sortOrder" : "8"  }, 
    "hhg" : {  "acc" : "-1", "er" : "0", "dam" : "20", "traits" : "AE1,IF", "type" : "thrown", "ammo" : "1", "sortOrder" : "8"  }, 
    "hwg" : {  "acc" : "-1", "er" : "0", "dam" : "10", "traits" : "AE1,H,IF", "type" : "thrown", "ammo" : "1", "sortOrder" : "8"  }, 
    "sdg" : {  "acc" : "-1", "er" : "0", "dam" : "30", "traits" : "AE2,IF", "type" : "thrown", "ammo" : "1", "sortOrder" : "8"  }, 
    "cr" : {  "acc" : "0", "er" : "0", "dam" : "S+1", "type" : "melee", "sortOrder" : "0"  }, 
    "cs" : {  "acc" : "0", "er" : "0", "dam" : "S+3", "traits" : "HM","type" : "melee", "sortOrder" : "0"  }, 
    "rp" : {  "acc" : "0", "er" : "0", "dam" : "S+0", "traits" : "HM", "type" : "melee", "sortOrder" : "2"  }, 
    "va" : {  "acc" : "0", "er" : "0", "dam" : "S+4", "traits" : "HM", "type" : "melee", "sortOrder" : "0"  }, 
    "vb" : {  "acc" : "0", "er" : "0", "dam" : "S+2", "type" : "melee", "sortOrder" : "0"  }, 
    "vr" : {  "acc" : "0", "er" : "0", "dam" : "S+0", "traits" : "LM", "type" : "melee", "sortOrder" : "0"  }, 
    "vs" : {  "acc" : "0", "er" : "0", "dam" : "S+8", "traits" : "HM", "type" : "melee", "sortOrder" : "0"  }, 
    "lsg" : {  "acc" : "0", "er" : "0", "dam" : "14", "type" : "melee", "ammo" : "3", "sortOrder" : "1"  }, 
    "msg" : {  "acc" : "0", "er" : "0", "dam" : "18", "type" : "melee", "ammo" : "3", "sortOrder" : "1"  }, 
    "hsg" : {  "acc" : "0", "er" : "0", "dam" : "22", "type" : "melee", "ammo" : "3", "sortOrder" : "1"  },     
    "pa"   : { "dam": 0,  "type": "melee",  "sortOrder": "10" },     

}

'''
    trait types: 
        Move -
        DEF -
        EW -
        Aux -
        Misc -
'''
traitRef = {
    # Move perks
    "imp_or_w"        : { "label": "Imp. OR (W)",  "type": "move",
        "desc": "Reduce the cost of difficult terrain by 1 MP (minimum 1) in Walker mode.",  }, 
    "imp_or_g"        : { "label": "Imp. OR (G)",  "type": "move",
        "desc": "Reduce the cost of difficult terrain by 1 MP (minimum 1) in Ground mode.",  }, 
    "imp_or_h"        : { "label": "Imp. OR (H)",  "type": "move",
        "desc": "Reduce the cost of difficult terrain by 1 MP (minimum 1) in Hover mode.",  }, 
    "imp_or"        : { "label": "Imp. OR",  "type": "move",
        "desc": "Reduce the cost of difficult terrain by 1 MP (minimum 1) in all modes.",  }, 
        
    "poor_or_w"        : { "label": "Poor OR (W)",  "type": "move",
        "desc": "Increase the cost of difficult terrain by 1 MP in Walker mode.",  }, 
    "poor_or_g"        : { "label": "Poor OR (G)",  "type": "move",
        "desc": "Increase the cost of difficult terrain by 1 MP in Ground mode.",  }, 
    "poor_or_h"        : { "label": "Poor OR (H)",  "type": "move",
        "desc": "Increase the cost of difficult terrain by 1 MP in Hover mode.",  }, 
    "poor_or"        : { "label": "Poor OR",  "type": "move",
        "desc": "RIncrease the cost of difficult terrain by 1 MP.",  }, 
    
    "autopilot"        : { "label": "Autopilot",  "type": "move",
        "desc": "Model uses CBT MP value for STP speed.",  }, 
    "amphib"        : { "label": "Amphib",  "type": "move",
        "desc": "Treat water terrain as open terra",  }, 
    "urban"        : { "label": "Urban",  "type": "move",
        "desc": "Tread speed as one lower for Turns only on roads or in urban areas.",  }, 
    "arms"        : { "label": "Arms",  "type": "move",
        "desc": "Model may climb vertical terrain features.",  }, 
    "climb_equip"        : { "label": "Climb Equip",  "type": "move",
        "desc": "Reduce the cost of climbing by 1 MP (minimum 1).",  }, 

    "jj_2"        : { "label": "Jump Jets (2)",  "type": "move",
        "desc": "Model may move 2\" vertically and horizontally without turning once per activation.",  }, 
    "jj_3"        : { "label": "Jump Jets (3)",  "type": "move",
        "desc": "Model may move 3\" vertically and horizontally without turning once per activation.",  }, 
    "jj_4"        : { "label": "Jump Jets (4)",  "type": "move",
        "desc": "Model may move 4\" vertically and horizontally without turning once per activation.",  }, 
    "jj_5"        : { "label": "Jump Jets (5)",  "type": "move",
        "desc": "Model may move 5\" vertically and horizontally without turning once per activation.",  }, 
    "jj_6"        : { "label": "Jump Jets (6)",  "type": "move",
        "desc": "Model may move 6\" vertically and horizontally without turning once per activation.",  }, 
    
    # DEF perks
    "rgd_aux"               : { "label": "Rgd. Aux.",  "type": "def",
        "desc": "Ignore damage penalties to EW checks.",  }, 
    "rgd_controls"     : { "label": "Rgd. Controls",  "type": "def",
        "desc": "Ignore damage penalties to DEF checks .",  }, 
    "rgd_weapons"     : { "label": "Rgd. Weapons",  "type": "def",
        "desc": "Ignore damage penalties to ATK checks .",  }, 
    "rgd_move"     : { "label": "Rgd. Move",  "type": "def",
        "desc": "Ignore damage from difficult terrain checks.",  }, 
        
    "exp_aux"               : { "label": "Exp. AUX",  "type": "def",
        "desc": "Model suffers -1 EW at L, -2 at H, -3 at C damage levels (included).",  }, 
    "exp_controls"     : { "label": "Exp. Controls",  "type": "def",
        "desc": "Model suffer -1 DEF at L, -2 at H, -3 at C damage levels (included).",  }, 
    "exp_weapons"     : { "label": "Exp. Weapons",  "type": "def",
        "desc": "Model suffers -1 ATK at L, -2 at H, -3 at C damage levels (included).",  }, 
    "exp_move"     : { "label": "Exp. Move",  "type": "def",
        "desc": "Double damage from difficult terrain checks.",  },         
    
    "imp_rear_def"        : { "label": "IRD",  "type": "def",
        "desc": "Attacker does not recieve the +1 ATK for a rear attack against this model." },         
        
    "resist_h"        : { "label": "Resist (H)",  "type": "def",
        "desc": "+1 DEF when defending against any weapon with the H trait.",  }, 
    "resist_heat"        : { "label": "Resist (HEAT)",  "type": "def",
        "desc": "+1 DEF when defending against any weapon with the HEAT trait.",  },     
    "resist_sb"        : { "label": "Resist (SB)",  "type": "def",
        "desc": "+1 DEF when defending against any weapon with the SB trait.",  },     
        
    "vuln_h"        : { "label": "Vuln (H)",  "type": "def",
        "desc": "-1 DEF when defending against any weapon with the H trait.",  }, 
    "vuln_heat"        : { "label": "Vuln (HEAT)",  "type": "def",
        "desc": "-1 DEF when defending against any weapon with the HEAT trait.",  }, 
    "vuln_sb"        : { "label": "Vuln (SB)",  "type": "def",
        "desc": "-1 DEF when defending against any weapon with the SB trait.",  },         
        
    "shield_f"        : { "label": "Shield (F)",  "type": "def",
        "desc": "Model adds +1 DEF against attacks in F arc.",  }, 
    "shield_a"        : { "label": "Shield (A)",  "type": "def",
        "desc": "Model adds +1 DEF against attacks in LA arc.",  }, 
    
    "weak_underside"        : { "label": "Weak Under.",  "type": "def",
        "desc" :  "Subtract -1DEF against attacks from below.",  }, 
    
    "ams"        : { "label": "AMS",  "type": "def",
        "desc": "Add +1 DEF against any attack with the MIS trait.",  }, 

    "acrobatic_w"        : { "label": "Acrobat (W)",  "type": "def",
        "desc": "Add +1D6 DEF in Walker mode.",  }, 
    "acrobatic_g"        : { "label": "Acrobat (G)",  "type": "def",
        "desc": "Add +1D6 DEF in Ground mode.",  }, 
    "acrobatic_h"        : { "label": "Acrobat (H)",  "type": "def",
        "desc": "Add +1D6 DEF in Hover mode.",  }, 
        
    "lumbering_w"        : { "label": "Lumber (W)",  "type": "def",
        "desc": "Subtract -1D6 DEF in Walker mode.",  }, 
    "lumbering_g"        : { "label": "Lumber (G)",  "type": "def",
        "desc": "Subtract -1D6 DEF in Ground mode.",  }, 
    "lumbering_h"        : { "label": "Lumber (H)",  "type": "def",
        "desc": "Subtract -1D6 DEF in Hover mode.",  }, 

    # EW perks
    "cbs"        : { "label": "CBS",  "type": "ew",
        "desc": "Anytime a IF attack lands within Auto-comm distance of this model, model gains an immediate active lock on firing model.",  }, 

    "lsp_1"        : { "label": "LSP:1",  "type": "ew",
        "desc": "This model subtracts 1 from it's concealment at all times.",  }, 
    "lsp_2"        : { "label": "LSP:2",  "type": "ew",
        "desc": "This model subtracts 2 from it's concealment at all times.",  }, 
    "lsp_3"        : { "label": "LSP:3",  "type": "ew",
        "desc": "This model subtracts 3 from it's concealment at all times.",  }, 

    "stealth_1"        : { "label": "Stealth (1)",  "type": "ew",
        "desc": "This model adds 1 to it's concealment at all times.",  }, 
    "stealth_2"        : { "label": "Stealth (2)",  "type": "ew",
        "desc": "This model adds 2 to it's concealment at all times.",  }, 
    "stealth_3"        : { "label": "Stealth (3)",  "type": "ew",
        "desc": "This model adds 3 to it's concealment at all times.",  }, 
    "stealth_4"        : { "label": "Stealth (4)",  "type": "ew",
        "desc": "This model adds 4 to it's concealment at all times.",  }, 
    "stealth_5"        : { "label": "Stealth (5)",  "type": "ew",
        "desc": "This model adds 5 to it's concealment at all times.",  }, 
    "stealth_6"        : { "label": "Stealth (6)",  "type": "ew",
        "desc": "This model adds 6 to it's concealment at all times.",  }, 

    "sensor_dep"        : { "label": "Sensor Dep",  "type": "ew", "desc": "This model does not auto-detect models within autocomm inches.",  }, 
    
    "ecm_1"                :  { "label": "ECM (1)",  "type" : "ew", "rating" : 1,  "desc": "May make ECM checks (see XX)" }, 
    "ecm_2"                :  { "label": "ECM (2)",  "type" : "ew", "rating" : 2,  "desc": "May make ECM checks (see XX)" }, 
    "ecm_3"                :  { "label": "ECM (3)",  "type" : "ew", "rating" : 3,  "desc": "May make ECM checks (see XX)" }, 
    "ecm_4"                :  { "label": "ECM (4)",  "type" : "ew", "rating" : 4,  "desc": "May make ECM checks (see XX)" }, 
        
    "eccm_1"                :  { "label": "ECCM (1)",  "type" : "ew",  "rating" : 1,  "desc": "May make ECCM checks (see XX)" }, 
    "eccm_2"                :  { "label": "ECCM (2)",  "type" : "ew",  "rating" : 2,  "desc": "May make ECCM checks (see XX)" }, 
    "eccm_3"                :  { "label": "ECCM (3)",  "type" : "ew",  "rating" : 3,  "desc": "May make ECCM checks (see XX)" }, 
    "eccm_4"                :  { "label": "ECCM (4)",  "type" : "ew",  "rating" : 4,  "desc": "May make ECCM checks (see XX)" }, 
        
    "td_1"                :  { "label": "TD (1)",  "type" : "ew",  "rating" : 1, "desc": "Target FO is DESIGNATED.  Reduce scatter threshold by 1." }, 
    "td_2"                :  { "label": "TD (2)",  "type" : "ew",  "rating" : 2, "desc": "Target FO is DESIGNATED.  Reduce scatter threshold by 2." }, 
    "td_3"                :  { "label": "TD (3)",  "type" : "ew",  "rating" : 3, "desc": "Target FO is DESIGNATED.  Reduce scatter threshold by 3." }, 
    "td_4"                :  { "label": "TD (4)",  "type" : "ew",  "rating" : 4, "desc": "Target FO is DESIGNATED.  Reduce scatter threshold by 4." }, 
        
    "sat_uplink"     :  { "label": "Sat. Uplink",  "type" : "ew",  "desc": "Model may ignore solid concealment when determining LoS." }, 
    
    "smoke_1"          :  { "label": "Smoke (1)",  "type" : "ew",  "desc": "Model may spend 1 action to add 1 points of concealment until next activation." }, 
    "smoke_2"          :  { "label": "Smoke (2)",  "type" : "ew",  "desc": "Model may spend 1 action to add 2 points of concealment until next activation." }, 
    "smoke_3"          :  { "label": "Smoke (3)",  "type" : "ew",  "desc": "Model may spend 1 action to add 3 points of concealment until next activation." }, 
    "smoke_4"          :  { "label": "Smoke (4)",  "type" : "ew",  "desc": "Model may spend 1 action to add 4 points of concealment until next activation." }, 
    "smoke_6"          :  { "label": "Smoke (6)",  "type" : "ew",  "desc": "Model may spend 1 action to add 6 points of concealment until next activation." }, 

    "boom_1"     :  { "label": "Sensor Boom (1)",  "type" : "ew",  "desc": "May use any point within 1\" as origin for all sensor checks." }, 
    "boom_2"     :  { "label": "Sensor Boom (2)",  "type" : "ew",  "desc": "May use any point within 2\" as origin for all sensor checks." }, 
    "boom_3"     :  { "label": "Sensor Boom (3)",  "type" : "ew",  "desc": "May use any point within 3\" as origin for all sensor checks." }, 
    "boom_4"     :  { "label": "Sensor Boom (4)",  "type" : "ew",  "desc": "May use any point within 4\" as origin for all sensor checks." }, 
    
    "sensor_dep"     :  { "label": "Sensor Dep",  "type" : "ew",  "desc": "Cannot auto-detect models within their size." }, 
    "emissions"       :  { "label": "Emissions",  "type" : "ew",  "desc": "Model always counted as being 'designated' and 'forward observed'." }, 
    "ewh"                   :  { "label": "EWH",  "type" : "ew",  "desc": "Model gains an immediate active lock against any model that uses ECM, ECM or TD witin LoS of model." }, 
        
    # Misc perks here

    "airdrop"                : { "label": "Airdroppable",  "type": "misc",  "desc": "This model may deploy via the airdrop rules." }, 
    
    "hep_desert"        : { "label": "HEP (Desert)",  "type": "misc", "desc": "This model ignores damage from DESERT table-effects.",  }, 
    "low_profile_g"  : { "label": "Low Profile (G)",  "type": "misc",  "desc": "This model gets a +1 DEF when in cover if in GROUND movement." }, 

    "afc"        : { "label": "AFC",  "type": "misc",
        "desc": "Spend one action to fire two weapons at -1D6 ATK each.",  }, 
    "ann"        : { "label": "ANN",  "type": "misc",
        "desc": "Add +1D6 to a single action during this model's activation.",  }, 

    "def_sensors"        : { "label": "Def. Sensors",  "type": "misc",
        "desc": "Add +1D to sensor checks, but remove highest single die.",  }, 
    "def_firecon"        : { "label": "Def. Firecon",  "type": "misc",
        "desc": "Add +1D to attack checks, but remove highest since die.",  }, 
    
    "infantry"          : { "label" : "Infantry",  "type" : "misc", 
        "desc": "Remove the highest dice from any attack roll without the AI trait." }, 
    "aircraft"          : { "label" : "Aircraft",  "type" : "misc", 
        "desc": "Remove the highest dice from any attack roll without the AA trait." }, 
        

    "ld_1"          : { "label" : "LD (1)",  "type" : "misc", 
        "desc": "Model adds +1D6 to any LD skill check." }, 

    "pak_minerva" : { "label": "PAK Minerva",  "type": "misc", 
        "desc" : "If any dice rolls a 1,  ?" }, 
    "pak_maxwell" : { "label": "Unstable (Maxwell)",  "type": "misc", 
        "desc" : "If any dice rolls a 1,  ?" }, 
    "pak_mordred" : { "label": "PAK Mordred",  "type": "misc", 
        "desc" : "If any dice rolls a 1,  immediately become stationary but gain +1 to ATK until next activation." }, 
    "pak_jan" : { "label": "Unstable (Jan)",  "type": "misc", 
        "desc" : "If any dice rolls a 1,  ?" }, 
    "pak_morgana" : { "label": "Unstable (Morgana)",  "type": "misc", 
        "desc" : "If any dice rolls a 1,  model gains +1 concealment until next activation." }, 

    "grels" : { "label": "GRELs",  "type": "misc", 
        "desc" : "May fire weapons with STA trait at Combat speed." }, 
    "flails" : { "label": "FLAILs",  "type": "misc", 
        "desc" : "May fire weapons with STA trait at Combat speed." }, 

    "drone_demo"        : { "label": "Drone (D)",  "type": "misc",
        "desc": "May use the drone's location for resolving one attack (T trait) each turn.",  }, 
    "drone_hk"        : { "label": "Drone (D)",  "type": "misc",
        "desc": "May use the drone's location for resolving one attack (AI trait) each turn.",  }, 
    "drone_recon"        : { "label": "Drone (D)",  "type": "misc",
        "desc": "May use the drone's location for resolving one sensors each turn.",  }, 
    "dronebay"        : { "label": "Drone Bay",  "type": "misc",
        "desc": "Model may dock drones for no action cost.",  }, 

    "transport_2"   : { "label" : "Transport (2)" ,  "type" : "misc", 
        "desc": "Model may transport up to 1 model of size 2 or smaller." }, 
    "transport_4"   : { "label" : "Transport (4)" ,  "type" : "misc", 
        "desc": "Model may transport up to 2 models of size 2 or smaller." }, 
    
    # Weapons below here
    "ai"                          : { "label" : "AI",  "type": "weapon",  "desc": "Ignores Infantry perk.  Against model with Infantry perk, remove the highest dice from the defender's roll. " }, 
    "aa"                          : { "label" : "AA",  "type": "weapon",  "desc": "Ignores Aircraft perk.  Against model with Aircraft perk, remove the highest dice from the defender's roll. " }, 
    
    "ae1"                        : { "label" : "AE1",  "type": "weapon",  "rating": 1,  "desc": "All models within a 1\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty." }, 
    "ae2"                        : { "label" : "AE2",  "type": "weapon",  "rating": 2,  "desc": "All models within a 2\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty." }, 
    "ae3"                        : { "label" : "AE3",  "type": "weapon",  "rating": 3,  "desc": "All models within a 3\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty." }, 
    "ae4"                        : { "label" : "AE4",  "type": "weapon",  "rating": 4,  "desc": "All models within a 4\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty." }, 
    
    "bl1"                        : { "label" : "BL1",  "type": "weapon",  "rating": 1,  "desc": "All models within a 1\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty.  All models take a MoS 1 hit automatically." }, 
    "bl2"                        : { "label" : "BL2",  "type": "weapon",  "rating": 2,  "desc": "All models within a 2\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty.  All models take a MoS 1 hit automatically." }, 
    "bl3"                        : { "label" : "BL3",  "type": "weapon",  "rating": 3,  "desc": "All models within a 3\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty.  All models take a MoS 1 hit automatically." }, 
    "bl4"                        : { "label" : "BL4",  "type": "weapon",  "rating": 4,  "desc": "All models within a 4\" radius defend against this attack.  Models under the target point suffer a -1 DEF penalty.  All models take a MoS 1 hit automatically." }, 
    
    "ac"                          : { "label" : "AC",  "type": "weapon",  "desc": "FIXME" },         
    "ap"                          : { "label" : "AP",  "type": "weapon",  "desc": "Add +1 ATK for against targets with armor > 20, +2 for targets with armor > 30, and +3 for targets with armor > 40. " },         
    
    "snp"                  : { "label" : "SNP",  "type": "weapon",  "desc": "Weapons with this perk have a +0D DEF modifier at Extreme range (-1D/+0D/+0D)" }, 
    
    "ba1"            : { "label" : "BA1",  "type": "weapon",  "rating": 1,  "desc": "Give target -1 DEF for each additional point of ammo spent (up to 1)." }, 
    "ba2"            : { "label" : "BA2",  "type": "weapon",  "rating": 2,  "desc": "Give target -1 DEF for each additional point of ammo spent (up to 2)." }, 
    "ba3"            : { "label" : "BA3",  "type": "weapon",  "rating": 3,  "desc": "Give target -1 DEF for each additional point of ammo spent (up to 3)." }, 
    "ba4"            : { "label" : "BA4",  "type": "weapon",  "rating": 4,  "desc": "Give target -1 DEF for each additional point of ammo spent (up to 4)." }, 
    
    "bu1"                : { "label" : "BU1",  "type": "weapon",  "rating": 1,  "desc": "May add +1D6 to your ATK, but fumbles occur on 1 or 2." }, 
    "bu2"                : { "label" : "BU2",  "type": "weapon",  "rating": 2,  "desc": "May add +2D6 to your ATK, but fumbles occur on 1 or 2." }, 
    "bu3"                : { "label" : "BU3",  "type": "weapon",  "rating": 3,  "desc": "May add +3D6 to your ATK, but fumbles occur on 1 or 2." }, 
    
    "g"                            : { "label" : "G",  "type": "weapon",  "desc": "When resolving an attack against a target that is DESIGNATED (see TD), add +1 ATK." },     
    
    "h"                : { "label" : "H",  "type": "weapon",  "desc": "Target gains 1 stun counter on a successful attack (MoS 1+)." },     
    
    "if"                          : { "label" : "IF",  "type": "weapon",  "desc": "This weapon may be used to make Ranged Indirect Fire attacks." },   

    "link_2"                     : { "label" : "LINK(2)",  "type": "weapon",  "desc": "Defender must make 2 DEF rolls against this attack." }, 
    "link_3"                     : { "label" : "LINK(3)",  "type": "weapon",  "desc": "Defender must make 3 DEF rolls against this attack." }, 
    "link_4"                     : { "label" : "LINK(3)",  "type": "weapon",  "desc": "Defender must make 4 DEF rolls against this attack." }, 
    
    "mr"                            : { "label" : "MR",  "type": "weapon",  "desc": "This weapon may not be fired in PB range band." },   
    "mb"                            : { "label" : "MB",  "type": "weapon",  "desc": "When resolving an attack at Long range, reduce your Attack skill by 1D6." }, 
    
    "misl"                         : { "label" : "MISL",  "type": "weapon",  "desc": "Missle weapon." }, 
  
    "spy"                     : { "label" : "SPY",  "type": "weapon",  "desc": "This weapon ignores the cover modifier to an attack roll." },   
    "sb"                           : { "label" : "SB",  "type": "weapon",  "desc": "After resolving a successful hit (MoS 1+), defender rolls 1D6 for each point of MoS.  Ignore 1 point of MoS for each dice that shows 6+." },   
    "sta"             : { "label" : "STA",  "type": "weapon",  "desc": "This weapon may only be fired when the model is at Stationary speed." },   
    
    "lm"        : { "label" : "LM",  "type": "weapon",  "desc": "This weapon adds +1D to DEF, but -1D to ATK in melee." },     
    "hm"        : { "label" : "HM",  "type": "weapon",  "desc": "This weapon adds +1D to ATK, but -1D to DEF in melee." },     

    "heat"                      : { "label" : "HEAT",  "type": "weapon",  "desc": "This weapon may be countered by HEAT armor." },     

}
